iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
1
Security

資安0~100K只要30天系列 第 18

Day 18 - SQLi (三)

  • 分享至 

  • xImage
  •  

Union Based

這是一種很常見的攻擊方式
通常你看網頁是列表或是一些比如商品詳細頁面之類的
如果存在 SQLi 應該很高機率是 Union Based
其手法應用到 SELECT 中的 UNION

UNION

用來將兩個 SELECT 的結果合併起來

那在這項攻擊手法中通常會需要 "猜" 出該張表中欄位的數量
因為 union 的兩邊所 SELECT 欄位數量必須相同

在 UNION 的同時
我們還需要一個小技巧

一般來說
如果猜對欄位後
前面的 SELECT 條件如果成立
會將我們後面可控的 SELECT 結果放在最下面

因此我們需要將前面的 SELECT 條件永遠不成立
使得我們可自訂的部分永遠存在最上面

不然的話
很多程式會選擇 SQL return 回來的第一條結果當作輸出
我們就看不到自己要的資料了

三張重要的 Table

在 MySQL 與 MariaDB 中
有一個重要的 database 叫做 information_schema

在這之中分別有三張表會成為 union based 攻擊中的重要工具

  • SCHEMATA

  • TABLES

  • COLUMNS

從上面的縮圖中可以看到這三張表之間是層層相關的

  1. 首先從 SCHEMATA 中的 SCHEMA_NAME 取得所需的 db 名稱
  2. 接著從 TABLES 中的 TABLE_SCHEMA 鎖定 db 來找 TABLE_NAME,列出屬於該 db 的表名
  3. 有了 db 與 table 名稱後,利用 COLUMNS 鎖定 TABLE_SCHEMATABLE_NAME 來找出 COLUMN_NAME

幫各位列個簡表
標上 查詢 的就是在該表中我們所要獲得的欄位名

  • SCHEMATA
    • SCHEMA_NAME (查詢)
  • TABLES
    • TABLE_SCHEMA
    • TABLE_NAME (查詢)
  • COLUMNS
    • TABLE_SCHEMA
    • TABLE_NAME
    • COLUMN_NAME (查詢)

END

到了這裡
基本的 SQLi 相信各位應該不陌生了 XD
有一個很好的 SQLi 練習站大家可以去那邊練練
他是一題一題的通關式 CTF
隨著越後面需要有更靈活的注入方式

=> 連結


上一篇
Day 17 - SQLi (二)
下一篇
Day 19 - XSS (一)
系列文
資安0~100K只要30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言